import request from '@/Newapi/request/request';
import { UserQueryParams, UserEditParams, AdminUserType } from '../model/adminUserModel';
import { ElMessage } from 'element-plus';

// ApiResponse 接口已在 request.ts 中定义，这里只是为了类型推断
interface ApiResponse<T> {
  code: number;
  data: T;
  message?: string;
  msg?: string;
  total?: number;
}

// 分页结果接口
interface PaginationResult<T> {
  list: T[];
  total: number;
}

class AdminUserServiceImpl {
  private baseUrl = '/static';

  /**
   * 获取用户列表
   * @param params 查询参数
   * @returns 用户列表结果
   */
  async getUserList(params: UserQueryParams): Promise<PaginationResult<AdminUserType>> {
    try {
      const { page, pageSize, ...queryParams } = params;
      
      // 处理查询参数
      const requestParams: Record<string, any> = {
        page,
        pageSize,
        ...queryParams
      };
      
      const response = await request.get<any>(`${this.baseUrl}/user/list`, requestParams);
      
      if (response && response.data) {
        let list: AdminUserType[] = [];
        let total = 0;
        
        // 处理可能的不同响应格式
        if (Array.isArray(response.data)) {
          list = response.data;
          total = response.data.length;
        } else if (response.data.list && Array.isArray(response.data.list)) {
          list = response.data.list;
          total = response.data.total || list.length;
        } else if (response.data.rows && Array.isArray(response.data.rows)) {
          list = response.data.rows;
          total = response.data.total || list.length;
        }
        
        return { list, total };
      }
      
      return { list: [], total: 0 };
    } catch (error) {
      console.error('获取用户列表失败:', error);
      ElMessage.error('获取用户列表失败');
      return { list: [], total: 0 };
    }
  }

  /**
   * 获取用户详情
   * @param id 用户ID
   * @returns 用户详情
   */
  async getUserDetail(id: number): Promise<AdminUserType | null> {
    try {
      const response = await request.get<AdminUserType>(`${this.baseUrl}/user/${id}`);
      return response.data || null;
    } catch (error) {
      console.error(`获取用户详情失败: ID=${id}`, error);
      ElMessage.error('获取用户详情失败');
      return null;
    }
  }

  /**
   * 添加用户
   * @param params 用户数据
   * @returns 添加结果
   */
  async addUser(params: UserEditParams): Promise<any> {
    try {
      const response = await request.post(`${this.baseUrl}/user/add`, params);
      ElMessage.success('添加用户成功');
      return response.data;
    } catch (error) {
      console.error('添加用户失败:', error);
      ElMessage.error('添加用户失败');
      return null;
    }
  }

  /**
   * 更新用户
   * @param id 用户ID
   * @param params 用户数据
   * @returns 更新结果
   */
  async updateUser(id: number, params: UserEditParams): Promise<any> {
    try {
      // 确保params中包含id字段
      const updateParams = { 
        ...params, 
        id 
      };
      const response = await request.put(`${this.baseUrl}/user/update`, updateParams);
      ElMessage.success('更新用户成功');
      return response.data;
    } catch (error) {
      console.error('更新用户失败:', error);
      ElMessage.error('更新用户失败');
      return null;
    }
  }

  /**
   * 删除用户
   * @param id 用户ID
   * @returns 删除结果
   */
  async deleteUser(id: number): Promise<any> {
    try {
      const response = await request.delete(`${this.baseUrl}/user/${id}`);
      ElMessage.success('删除用户成功');
      return response.data;
    } catch (error) {
      console.error('删除用户失败:', error);
      ElMessage.error('删除用户失败');
      return null;
    }
  }

  /**
   * 批量删除用户
   * @param ids 用户ID数组
   * @returns 删除结果
   */
  async batchDeleteUsers(ids: number[]): Promise<any> {
    try {
      const response = await request.delete(`${this.baseUrl}/user/del`, { ids });
      ElMessage.success('批量删除用户成功');
      return response.data;
    } catch (error) {
      console.error('批量删除用户失败:', error);
      ElMessage.error('批量删除用户失败');
      return null;
    }
  }

  /**
   * 重置用户密码
   * @param id 用户ID
   * @param newPassword 新密码
   * @returns 重置结果
   */
  async resetPassword(id: number, newPassword?: string): Promise<any> {
    try {
      const response = await request.put(`${this.baseUrl}/user/${id}/reset-password`, { password: newPassword });
      ElMessage.success('密码重置成功');
      return response.data;
    } catch (error) {
      console.error('重置密码失败:', error);
      ElMessage.error('重置密码失败');
      return null;
    }
  }

  /**
   * 获取用户组列表
   * @returns 用户组列表
   */
  async getUserGroups(): Promise<any[]> {
    try {
      const response = await request.get<any>(`${this.baseUrl}/role/group`);
      
      if (response && response.data) {
        return Array.isArray(response.data) ? response.data : [];
      }
      return [];
    } catch (error) {
      console.error('获取用户组列表失败:', error);
      ElMessage.error('获取用户组列表失败');
      return [];
    }
  }

  /**
   * 获取所有管理员用户列表
   * @returns 管理员用户列表
   */
  async getAllAdminUsers(): Promise<any[]> {
    try {
      const response = await request.get<any>(`${this.baseUrl}/user/all`);
      
      if (response && response.data) {
        return Array.isArray(response.data) ? response.data : [];
      }
      return [];
    } catch (error) {
      console.error('获取所有管理员用户失败:', error);
      ElMessage.error('获取所有管理员用户失败');
      return [];
    }
  }
}

// 导出单例
export const adminUserService = new AdminUserServiceImpl(); 